#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        if(p.size()>s.size())
        {
            return vector<int>();
        }
        vector<int> ret;
        int hash1[26] = {0};
        int hash2[26] ={0};
        int left = 0;
        int right = 0;
        int n = s.size();
        int count = 0;//这个字符用于判断当前的滑动窗口中有效元素的个数是否等于p的长度了，等于说明找到了一个字母
        //异位词
        for(int i = 0;i<p.size();i++)
        {
            hash1[p[i]-'a']++;
        }
        while(right<n)
        {
             hash2[s[right]-'a']++;
            //进窗口
            if(hash2[s[right]-'a']<=hash1[s[right]-'a'])
            {
                //说明这一次right进入的时候right是一个有效的词语
                count++;
            }
            //出窗口
            while(right-left+1>p.size())
            {
                if(hash2[s[left]-'a']<=hash1[s[left]-'a'])
                {
                    count--;
                }
                hash2[s[left]-'a']--;
                left++;
            }
            if(count == p.size())
            {
                ret.push_back(left);
            }
            right++;
        }
        return ret;
    }
};